Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 77384b37d45159c23e12a11d5aa6a528d606d3be


Parents : e74cae6
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-07T11:32:26-05:00

fix(plugin_manager): enhance error handling for plugin API version and capability validation

Changes

1 files changed, 16 insertions(+), 8 deletions(-)


Diff

diff --git a/meshchatx/src/backend/plugin_manager.py b/meshchatx/src/backend/plugin_manager.py
index 90b6da0d..f03ad576 100644
--- a/meshchatx/src/backend/plugin_manager.py
+++ b/meshchatx/src/backend/plugin_manager.py
@@ -10,7 +10,7 @@ import sqlite3
import threading
import time
from dataclasses import dataclass, field
-from typing import Any
+from typing import Any, cast
from meshchatx.src.backend.plugin_guard import (
PLUGIN_ERROR_BUDGET,
@@ -173,7 +173,13 @@ class PluginManager:
if not isinstance(version, str) or not version.strip():
raise ValueError("plugin version is required")
api_version = manifest.get("apiVersion")
- if int(api_version) != SUPPORTED_API_VERSION:
+ if api_version is None:
+ raise ValueError("plugin apiVersion is required")
+ try:
+ parsed_api_version = int(api_version)
+ except (TypeError, ValueError) as exc:
+ raise ValueError("plugin apiVersion is invalid") from exc
+ if parsed_api_version != SUPPORTED_API_VERSION:
raise ValueError(
f"unsupported apiVersion (expected {SUPPORTED_API_VERSION})"
)
@@ -465,9 +471,10 @@ class PluginManager:
args = args or {}
try:
if method == "callManager":
- return self.call_manager(
- plugin_id, args.get("capability"), args.get("args") or {}
- )
+ capability = args.get("capability")
+ if not isinstance(capability, str) or not capability:
+ raise ValueError("capability is required")
+ return self.call_manager(plugin_id, capability, args.get("args") or {})
if method == "readPaths":
return self.call_manager(plugin_id, "destinationPath.read", args)
backend = record.manifest.get("backend")
@@ -525,8 +532,9 @@ class PluginManager:
instance = linker.instantiate(store, module)
payload = json.dumps({"method": method, "args": args}).encode("utf-8")
validate_invoke_payload(payload)
- memory = instance.exports(store)["memory"]
- alloc = instance.exports(store).get("alloc")
+ exports = cast(Any, instance.exports(store))
+ memory = exports["memory"]
+ alloc = exports.get("alloc")
if alloc:
ptr = alloc(store, len(payload))
else:
@@ -538,7 +546,7 @@ class PluginManager:
)
data = memory.data_ptr(store)
data[ptr : ptr + len(payload)] = payload
- invoke = instance.exports(store)["invoke"]
+ invoke = exports["invoke"]
invoke(store, ptr, len(payload), 0)
return {"ok": True, "logs": logs}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────